package main

import (
	"log"
)

// 用例实例
type TestCase struct {
	Id         int
	PreShell   []ActionWord
	CaseStep   []ActionWord
	AfterShell []ActionWord
}

// AW实例
type ActionWord struct {
	// Type     int // logic|ActionWord
	Id       int
	Args     interface{} // jsonobject
	Children []ActionWord
}

// AW定义和校验：建议不通过配置来做，建议直接通过html+css+js来展示、配置、校验
// // AW定义
// type ActionWordDefine struct {
// 	Id int
// 	Name string
// 	Desc string
// 	Args []AWArgDefine
// }

// // AW参数定义
// type AWArgDefine struct {
// 	Name string
// 	Desc string

// 	Type int // int, float, string, boolean, list<T>, dict<T>, enum<T>
// 	SubType int // 如果Type是list或者enum，则有意义：int, float, string, boolean
// 	// 如果是http的header，其实是type为list，然后是dict，然后是string。太复杂了，不如直接通过一个html+js片段来设置
// 	Default interface{}
// 	Checker func(value interface{}) error
// 	// 	// IntMin int
// 	// 	// IntMax int
// 	// 	// FloatMin float
// 	// 	// FloatMax float
// 	// 	// StringLen int
// 	// 	// ListType int
// }

// const (
// 	TYPE_LOGIC = itoa
// 	TYPE_AW
// )

func main() {
	/* AW实例
	{
		"method": "GET",
		"url": "http://www.baidu.com",
		"headers": [
			{"name": "Host", "value": "127.0.0.1"},
			{"name": "Content-Type", "value": "text/json"},
		],
		"body": "{\"name\": \"chuqq\"}"
	}
	*/
	// 预先定义的AW
	// aws := []ActionWordDefine{
	// 	Id:   1,
	// 	Name: "SendHTTPRequest",
	// 	Desc: "发送一个HTTP请求",
	// 	// Args:
	// }

	// 用例
	tc := &TestCase{
		Preshell: []ActionWord{
			ActionWord{
				// 登录
				AWId: 10, // SendHTTPRequest
				Args: map[string]interface{}{
					"url":     "http://www.baidu.com",
					"method":  "POST",
					"headers": nil,
					"body":    "",
				},
				Children: nil,
			},
		},
		CaseStep: []ActionWord{
			ActionWord{
				AWId: 1, // if
				Args: "statuscode == 200",
				Children: []ActionWord{
					ActionWord{
						// 查询订单
						Type: TYPE_AW,
						AWId: 10, // SendHTTPRequest
						Args: map[string]interface{}{
							"url":     "http://www.baidu.com",
							"method":  "GET",
							"headers": nil,
							"body":    "",
						},
						Children: nil,
					},
				},
			},
		},
		Aftershell: []ActionWord{
			ActionWord{
				// 登出
				Type: TYPE_AW,
				AWId: 1, // SendHTTPRequest
				Args: map[string]interface{}{
					"url":     "http://www.baidu.com",
					"method":  "POST",
					"headers": nil,
					"body":    "",
				},
				Children: nil,
			},
		},
	}
}
